package com.zhen.generator;

import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.List;

import com.zhen.generator.constraints.NotNull;

import cn.org.rapid_framework.generator.GeneratorConstants;
import cn.org.rapid_framework.generator.GeneratorProperties;
import cn.org.rapid_framework.generator.util.GLogger;

/**
 * 执行代码生成器所需的配置信息。
 * 
 * @author Luffy
 *
 */
public class Configuration {

    /**
     * 数据源--数据库驱动
     */
    @NotNull
    public static final String DRIVER = "jdbc_driver";

    /**
     * 数据源--数据库地址
     */
    @NotNull
    public static final String URL = "jdbc_url";

    /**
     * 数据源--用户名
     */
    @NotNull
    public static final String USERNAME = "jdbc_username";

    /**
     * 数据源--密码
     */
    @NotNull
    public static final String PASSWORD = "jdbc_password";

    /**
     * 包前缀
     */
    @NotNull
    public static final String BASEPACKAGE = "basepackage";

    /**
     * 生成的代码输出目录
     */
    public static final String OUTROOT = "outRoot";

    /**
     * 数据库表名
     */
    public static final String TABLENAME = "tableName";

    /**
     * 需要移除的表名前缀,使用逗号进行分隔多个前缀,示例值: t_,v_
     */
    public static final String TABLEREMOVEPREFIXES = "tableRemovePrefixes";

    /**
     * 记录非空字段
     */
    private static List<String> nonFieldList;

    protected Configuration() {

    }

    /**
     * 获取由NotNull注解的字段集合。
     * 
     * @return
     */
    public static List<String> getNonFields() {
        if (nonFieldList == null) {
            nonFieldList = new ArrayList<String>();
            for (Field field : Configuration.class.getFields()) {
                if (field.isAnnotationPresent(NotNull.class)) {
                    try {
                        nonFieldList.add((String) field.get(null));
                    }
                    catch (IllegalArgumentException e) {
                        GLogger.error(e.getMessage(), e);
                    }catch(IllegalAccessException e){
                    	GLogger.error(e.getMessage(), e);
                    }
                }
            }
        }
        return nonFieldList;
    }

    public static void setProperty(GeneratorConstants key, String value) {
        GeneratorProperties.setProperty(key, value);
    }

    public static void setProperty(String key, String value) {
        GeneratorProperties.setProperty(key, value);
    }

}
